home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Compute! Gazette 1989 August
/
1989-08.d64
/
stars ii
(
.txt
)
< prev
next >
Wrap
Commodore BASIC
|
2022-09-20
|
11KB
|
320 lines
10 rem copyright 1989 compute! publications, inc. - all rights reserved
20 dimmc(12):forjf=1to12:readmc(jf):next
30 poke53280,6:poke53281,15:print"[151]"
40 poke 55,0:poke 56,76:rd=(NULL)/180:sm$(0)="off":sm$(1)="on(press s to stop)"
50 lt=40:lg=75:tz=5:yy=1990:mm=1:dd=1:la=lt*rd:ah=10:ap$="pm"
60 print"[147]";:printtab(14) " stars ii [146]":print
70 printtab(12)"copyright 1989":printtab(7)"compute! publications, inc."
80 printtab(10)"all rights reserved":print:print
90 printtab(8)"please wait 40 seconds[146]"
100 fori=0to7:readdf$(i):next
110 for i=1to33:reada:poke49151+i,a:next
120 poke56334,peek(56334)and254:poke1,peek(1)and251
130 sys49152:poke1,peek(1)or4:poke56334,peek(56334)or1
140 def fnac(x)=(atn(abs(sqr(1-x*x)/x))+(sgn(x)-1)*(NULL)/2)*sgn(x)
150 def fnas(x)=atn(abs(x)/(sqr(1-x*x)))*sgn(x)
160 for i=0to5:read p$(i),ps(i),tp(i),e(i),w(i),ec(i),a(i),i(i),o(i),t0(i):next
170 for i=1to4:readpo(i),di(i):next:gosub980
180 fori=0to3:a%(i)=peek(63+i):next:gosub1680
190 print"[147] stars ii [146]":gosub1230:print" menu [146]"
200 print"1 - overhead sky plot"
210 print"2 - eastern horizon plot"
220 print"3 - southern horizon plot"
230 print"4 - western horizon plot"
240 print"5 - solar system data"
250 print"6 - set date & time"
260 print"7 - travel"
270 print"8 - constellations"
280 print"9 - simulation mode: ";sm$(sm)
290 print"q - quit"
300 poke198,0:wait198,1:geta$:qm=val(a$):ifa$="q"thenprint"[147]":end
310 poke53280,6:ifqm>9orqm=0then300
320 df$="e":df=0:dq=1:j=0:onqmgoto350,350,330,340,370,400,410,470,520
330 df$="s":df=(NULL)/2:dq=3:goto350
340 df$="w":df=(NULL):dq=5
350 gosub700:gosub1080:gosub760:ifa$="s"then650
360 goto530
370 poke53280,6:print"[147] the sky [146]":gosub1230
380 print" sidereal time="int(ts)"hrs"int((ts-int(ts))*60)"min"
390 gosub700:gosub760:gosub680:goto190
400 gosub1680:goto190
410 input"[147]latitude=";lt:ifabs(lt)>89.9thenlt=89.9*sgn(lt)
420 la=lt*rd:print"change longitude (y/n)? "
430 poke198,0:wait198,1:geta$:ifa$="y"then450
440 goto190
450 input"longitude=";lg
460 input"time zone (est=5 cst=6 mst=7 pst=8):";tz:gosub2000:goto190
470 poke53280,6:print"[147]constellation list"
480 readra:ifra>0thenreaddc,mg:goto480
490 j=j+1:readlb$:iflb$="end"thengosub690:gosub680:goto190
500 reada$:printlb$tab(12)a$:ifj<20then480
510 gosub680:j=0:goto470
520 sm=1-sm:hd=0:at$="s":t$="":goto190
530 geta$:ifa$="s"then650
540 readra:ifra>0then570
550 readlb$:iflb$="end"then610
560 reada$:x=907:bh=0:gosub1390:gosub1420:goto530
570 readdc,mg:ifbh=1thenmg=5:goto530
580 gosub2160:ifal<0thenmg=5:bh=1:goto530
590 gosub1480:ifx>0thengosub1300
600 goto530
610 ifsm=0then640
620 mm=mm+1:ifmm=13thenmm=1:yy=yy+1
630 gosub690:gosub2000:goto350
640 lb$="press return":x=907:gosub1420:poke198,0:wait198,1
650 gosub690:sm=0
660 poke53272,20:poke56576,3:poke53265,peek(53265)and223:poke648,4:poke53280,6
670 goto190
680 print"press any key":poke198,0:wait198,1:return
690 fori=0to3:poke63+i,a%(i):next:return
700 md=2*(NULL)/365.2422*da-.0656743:gosub1560
710 md=md+2*ec(0)*sin(md)+4.9322377:gosub1560
720 l=md:b=0:gosub1610:gosub2160
730 bg=0:if(al/rd)>-10thenbg=6
740 if(al/rd)>0 then bg=14
750 return
760 printtab(8)" alt distance "
770 printtab(8)"(deg) view (million mi)"
780 k=0:gosub1390:lb$="sun":x=907:bh=0:gosub1420:gosub1210
790 gosub1480:gosub1370
800 gosub950:le=lp:re=rp:printtab(25)int(rp*930)/10
810 for k=1 to 5:geta$:ifa$="s"thenreturn
820 gosub950:psi=fnas(sin(lp-o(k))*sin(i(k)))
830 y=sin(lp-o(k))*cos(i(k)):x=cos(lp-o(k))
840 gosub1640:l1=o(k)+r0:r1=rp*cos(psi):ifk>2then880
850 a1=atn((r1*sin(le-l1))/(re-r1*cos(le-l1)))
860 md=((NULL)+le+a1):gosub1560:l=md
870 b=atn(r1*tan(psi)*sin(l-l1)/(re*sin(l1-le))):goto900
880 md=atn(re*sin(l1-le)/(r1-re*cos(l1-le)))+l1:gosub1560:l=md
890 b=atn(r1*tan(psi)*sin(l-l1)/(re*sin(l1-le)))
900 gosub1610:gosub2160:gosub1210
910 lb$=p$(k):x=907:bh=0:gosub1390:gosub1420
920 dp=sqr(re*re+rp*rp-2*re*rp*cos(lp-le))
930 printtab(25)int(dp*93)
940 gosub1480:gosub1370:next:return
950 md=360/365.2422*da/tp(k)*rd:gosub1560:np=md
960 md=np+2*ec(k)*sin(np+e(k)-w(k))+e(k):gosub1560:lp=md
970 rp=a(k)*(1-ec(k)*ec(k))/(1+ec(k)*cos(lp-w(k))):return
980 s8=32769:l8=8191:n6=32768:poke40959,0:gosub1440:ad=n6
990 for i=1to180step2:x0=127*sin(2*i*rd)+127:y0=100*cos(2*i*rd)+100
1000 gosub1270:next
1010 forj=1to4:x=po(j):y=di(j):gosub1430:next:q1=72:q2=192:gosub1050
1020 gosub1070:fori=0to39:x=760+i:y=512:gosub1430:next
1030 q1=880:q2=888:gosub1050
1040 s8=30576:l8=2047:n6=19456:gosub1440:return
1050 fori=0to5:j=int(i/3):x=q1*(1-j)+q2*j+(i-3*j)*40
1060 y=ps(i):gosub1430:lb$=p$(i):x=x+1:gosub1420:next:return
1070 s8=24577:l8=8191:n6=24576:poke32767,0:gosub1440:ad=n6:return
1080 poke53280,bg:ad=24576:s8=23553:l8=1001:n6=23552:poke24553,bg+16:gosub1440
1090 ifqm=1thens8=32768:l8=8191:n6=ad:gosub1440:goto1120
1100 gosub1070:s8=19456:l8=2047:n6=30576:gosub1440
1110 fori=0to2:lb$=df$(i+dq):x=809+i*10:gosub1420:next
1120 poke53265,peek(53265)or32:poke53272,120:poke56576,2:ad=24576
1130 x=947:lb$=str$(mm):gosub1400
1140 x=949:y=376:gosub1430
1150 x=951:lb$=str$(dd):gosub1400
1160 x=953:y=376:gosub1430
1170 x=955:lb$=str$(yy):gosub1400
1180 x=987:lb$=str$(ah):gosub1400:x=989:y=464:gosub1430
1190 x=990:lb$=str$(int(an)):iflen(lb$)=2thenlb$=" 0"+right$(lb$,1)
1200 gosub1400:x=993:lb$=ap$:gosub1420:return
1210 printp$(k);tab(8);int(al*180/(NULL));
1220 printtab(16);df$(int(az*4/(NULL)));:return
1230 print" latitude="lt;:iflg<>75thenprint" longitude"lg;
1240 print"":printmm"/"dd"/"yy
1250 lb$=str$(int(an)):iflen(lb$)=2thenlb$=" 0"+right$(lb$,1)
1260 printah":"lb$" "ap$;t$:return
1270 xc=int(x0/8):yr=int(y0/8):ln=y0and7
1280 pt=ad+yr*320+xc*8+ln:xb=7-(x0and7)
1290 pokept,peek(pt)or2^xb:return
1300 onmggoto1310,1340,1350,1350,1360
1310 x0=x:y0=y+1:gosub1270:x0=x+1:y0=y:gosub1270:x0=x+2:y0=y:gosub1270
1320 x0=x+3:y0=y+1:gosub1270
1330 x0=x+1:y0=y+2:gosub1270:x0=x+2:y0=y+2:gosub1270
1340 x0=x+1:y0=y+1:gosub1270
1350 x0=x+2:y0=y+1:gosub1270
1360 return
1370 ifx=0thenreturn
1380 x=int(y/8)*40+int(x/8):y=ps(k):gosub1430:return
1390 s8=31833:l8=97:n6=31832:pokes8+l8,0:gosub1440:return
1400 forj=1tolen(lb$)-1:y=(val(mid$(lb$,j+1,1))+48)*8:gosub1430:x=x+1
1410 next:return
1420 forj=1tolen(lb$):y=(asc(mid$(lb$,j,1))-64)*8:gosub1430:x=x+1:next:return
1430 l8=7:s8=21504+abs(y):n6=ad+x*8:gosub1440:return
1440 a%=l8/256:b%=n6/256+a%:b6=n6+256*(a%-b%)
1450 c%=s8/256+a%:c6=s8+256*(a%-c%)
1460 poke781,a%+1:poke782,l8-256*a%:poke91,c%:poke90,c6:poke89,b%:poke88,b6
1470 sys41964:return
1480 x=0:y=0:ifal<0thenreturn
1490 ifqm>1then1530
1500 az=2*(NULL)-az:q=sin((NULL)/4-al/2)/cos((NULL)/4-al/2)
1510 x=int((100*q*sin(az)+100)*1.27)
1520 y=99-int(100*q*cos(az)):return
1530 ifal>.85*(NULL)/2thenreturn
1540 ifaz<df or az>df+(NULL)thenx=0:y=0:return
1550 x=320*(az-df)/((NULL)):y=10+146*(.85*(NULL)/2-al)/(.85*(NULL)/2):return
1560 if md<4*(NULL)thenmd=md-int((md+2*(NULL))/2/(NULL))*2*(NULL)
1570 if md>4*(NULL)thenmd=md-int((md-2*(NULL))/2/(NULL))*2*(NULL)
1580 ifmd<0thenmd=md+2*(NULL):goto1580
1590 ifmd=>2*(NULL)thenmd=md-2*(NULL):goto1590
1600 return
1610 ep=.4091:d8=sin(b)*cos(ep)+cos(b)*sin(ep)*sin(l):dc=fnas(d8)/rd
1620 y=sin(l)*cos(ep)-tan(b)*sin(ep):x=cos(l):gosub1640
1630 ra=r0/rd/15:return
1640 r0=atn(y/x):if x>0 and y<0 then r0=r0+2*(NULL)
1650 if x<0 and y>0 then r0=r0+(NULL)
1660 if x<0 and y<0 then r0=r0+(NULL)
1670 return
1680 hd=0:at$="s":t$="":poke53280,6
1690 print"[147]year:[146] ";yy;"[157]";
1700 yr$=str$(yy):gosub3090:yy=val(yr$)
1710 print:print"month (1-12):[146] ";"[157]";mm;"[157]";
1720 yr$=str$(mm):gosub3090:mm=val(yr$):ifmm>12ormm<1thenprint"[157]";:goto1720
1730 gosub3150
1740 print:print"day:[146] ";dd;:print"[157]";
1750 yr$=str$(dd):gosub3090:dd=val(yr$):ifdd<1thenprint"[157]";:goto1750
1760 gosub3150:ifmm<>2then1830
1770 ifl1=1then1830
1780 ifdd<29then1840
1790 print:print"not a leap year!":goto1740
1800 gosub3150:ifl1=0ormm<>2then1830
1810 ifdd<30then1840
1820 print:print"not a leap year!":goto1740
1830 ifdd>mc(mm)thenprint"[157]";:goto1750
1840 print:ifmm<4ormm>10then1890
1850 print"standard or daylight time (s or d) [146] ";
1860 get at$:if at$=""then1860
1870 ifat$<>"d"andat$<>"s"then1860
1